#ifndef CONCREATESTATE_HPP
#define CONCREATESTATE_HPP
#include "xstateMachine/xstate.hpp"
#include "xsignal/signal.hpp"
#include <iostream>

class stateA:public xstate{
public:
    void doAction(){
        std::cout<<"thrdid:"<<std::this_thread::get_id()<<" stateA doAction!"<<std::endl;
    }
};

class stateB:public xstate{
public:
    void doAction(){
        std::cout<<"thrdid:"<<std::this_thread::get_id()<<" stateB doAction!"<<std::endl;
    }
};

class stateC:public xstate{
public:
    void doAction(){
        std::cout<<"thrdid:"<<std::this_thread::get_id()<<" stateC doAction!"<<std::endl;
    }
};

struct stateSender
{
    XSIGNAL(signals1Ts2);
    XSIGNAL(signals2Ts3);
    XSIGNAL(signals3Ts1);
    XSIGNAL(signalsExit);

    void emitsignals1Ts2()
    {
        xemit(signals1Ts2)();
    }
    void emitsignals2Ts3()
    {
        xemit(signals2Ts3)();
    }
    void emitsignals3Ts1()
    {
        xemit(signals3Ts1)();
    }
    void emitsignalExit()
    {
        xemit(signalsExit)();
    }
};
#endif